#include <stdlib.h>
#include <filosofo.h>
#include <palillo.h>

FilosofoThread::FilosofoThread
(const int& id, Palillo* izq, Palillo *der):
  _id(id), _pIzq(izq), _pDer(der)
{
  srand((int)getpid());
}

void
FilosofoThread::run ()
{
  while (true) {
    coger_palillos();
    comer();
    dejar_palillos();
    pensar();
  }
}

void
FilosofoThread::coger_palillos ()
{
  _pIzq->lock();
  _pDer->lock();
}
 
void
FilosofoThread::dejar_palillos ()
{
  _pIzq->unlock();
  _pDer->unlock();
}

void
FilosofoThread::comer () const
{
  cout << _id << ": comiendo..." << endl;
  IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(rand() % 3));
}
 
void
FilosofoThread::pensar () const
{
  cout << _id << ": pensando..." << endl;
  IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(rand() % 5));
}
